#include "prosetpage.h"
#include "ui_prosetpage.h"
#include <QDir>
#include <QFileDialog>
ProSetPage::ProSetPage(QWidget *parent) :
    QWizardPage(parent),
    ui(new Ui::ProSetPage)
{
    ui->setupUi(this);
    registerField("proPath",ui->lineEdit_2);
    registerField("proName*",ui->lineEdit);
    connect(ui->lineEdit,&QLineEdit::textEdited,this,&ProSetPage::completeChanged);
    connect(ui->lineEdit_2,&QLineEdit::textEdited,this,&ProSetPage::completeChanged);
    //这两行代码将两个 QLineEdit 控件的 textEdited 信号连接到当前类（ProSetPage）的 completeChanged 槽函数。
    //textEdited 信号会在用户输入(编辑)时触发，即每次编辑框的文本内容发生变化时。
    //completeChanged是一个信号，这个信号发出来就有isComplete函数，这个信号
    //就表示页面完成了要进行检测这一步
    QString curPath = QDir::currentPath();
    ui->lineEdit_2->setText(curPath);
    ui->lineEdit_2->setCursorPosition(ui->lineEdit_2->text().size());
    ui->lineEdit_2->setClearButtonEnabled(true);
    ui->lineEdit->setClearButtonEnabled(true);
}

ProSetPage::~ProSetPage()
{
    delete ui;
}

void ProSetPage::GetProSettings(QString &name,QString &path)
{
    name=ui->lineEdit->text();
    path=ui->lineEdit_2->text();
}

bool ProSetPage::isComplete() const//输入路径和文件名时检测
{
    if(ui->lineEdit->text() == "" || ui->lineEdit_2->text() == "")
    {
        return false;
    }
    QDir dir(ui->lineEdit_2->text());
    if(!dir.exists())//判断输入的路径是否存在
    {
        ui->tips->setText("The current path does not exist");
        return false;
    }
    QString absFilePath = dir.absoluteFilePath(ui->lineEdit->text());
    //absoluteFilePath 返回目录中文件的绝对路径名。不检查文件是否实际存在于目录中；
    //但是see exists（）。fileName中的冗余多个分隔符或"."和".."目录不会被删除(参见cleanPath())。
    QDir dist_dir(absFilePath);
    if(dist_dir.exists())
    {
        ui->tips->setText("The current file already exists");
        return false;
    }
    ui->tips->setText("");
    return QWizardPage::isComplete();
}

void ProSetPage::on_pushButton_clicked()//实现browse功能
{
    QFileDialog file_dialog;
    file_dialog.setFileMode(QFileDialog::Directory);
    //设置对话框模式为 QFileDialog::Directory，这意味着用户只能选择文件夹而非文件。
    file_dialog.setWindowTitle("选择导入的文件夹");
    auto path = QDir::currentPath();
    file_dialog.setDirectory(path);
    //获取当前的工作目录，并将文件对话框的默认目录设置为当前路径。
    file_dialog.setViewMode(QFileDialog::Detail);
    //file_dialog.setViewMode(QFileDialog::Detail);
    QStringList fileNames;
    if(file_dialog.exec())
    {
        fileNames = file_dialog.selectedFiles();
    }
    //调用 exec() 方法显示文件对话框。如果用户点击了“确定”按钮并选择了文件夹，
    //返回值为 true，然后获取选择的文件夹路径，并将其存储在 fileNames 中。
    if(fileNames.length()==0)
    {
        return;
    }
    QString import_path = fileNames.at(0);
    //获取选择的第一个文件夹路径。由于 fileMode 被设置为 QFileDialog::Directory，
    //此时 fileNames 列表中应该只有一个文件夹路径
    ui->lineEdit_2->setText(import_path);
    //将选择的文件夹路径显示到 UI 中的 QLineEdit（假设 lineEdit_2 是一个文本框控件）
}
